package com.jams.goodox.utils;

import android.content.Context;
import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.regex.Pattern;

/**
 * Created by jams on 2017/4/14.
 * ***
 * Tel: ***
 * <p>
 * 字符串工具类
 */

public class StringUtils {

    /**
     * 处理字符串，如果是null则返回"",否则返回原字符串。
     *
     * @param string 传入需要处理的字符串
     * @return 返回一个非NULL字符串
     */
    public static String newString(String string) {
        return string == null ? "" : string;
    }

    /**
     * 处理double类型，取整
     *
     * @param dou 传入的double值
     * @return 整型字符串
     */
    public static String doubleToIntegerString(Double dou) {
        if (dou == null) {
            return "";
        }
        DecimalFormat df = new DecimalFormat("######0");
        return df.format(dou);
    }

    /**
     * 处理double类型，保留两位小数
     *
     * @param dou 传入的double值
     * @return 保留两位小数的字符串
     */
    public static String doubleToString(Double dou) {
        if (dou == null) {
            return "0.00";
        }
        DecimalFormat df = new DecimalFormat("######0.00");
        return df.format(dou);
    }

    /**
     * 对象转float
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static float toFloat(String obj) {
        try {
            return Float.parseFloat(obj);
        } catch (Exception e) {
        }
        return 0f;
    }

    /**
     * 对象转double
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static double toDouble(String obj) {
        try {
            return Double.parseDouble(obj);
        } catch (Exception e) {
        }
        return 0;
    }

    /**
     * 获得汉语拼音首字母
     *
     * @param str 一个中文或英文单词
     * @return String 返回首字母
     */
    public static String getAlpha(String str) {
        if (str == null || str.length() == 0) {
            return "热";
        }

        char c = str.substring(0, 1).charAt(0);
        // 正则表达式，判断首字母是否是英文字母
        Pattern pattern = Pattern.compile("^[A-Za-z]+$");
        if (pattern.matcher(String.valueOf(c)).matches()) {
            return String.valueOf(c).toUpperCase(Locale.getDefault());
        } else {
            return "热";
        }
    }

    public static String getFromAssets(Context c, String fileName) {
        String Result = "";
        InputStreamReader inputReader = null;
        try {
            inputReader = new InputStreamReader(c.getResources().getAssets().open(fileName));
            BufferedReader bufReader = new BufferedReader(inputReader);
            String line = "";

            while ((line = bufReader.readLine()) != null) {
                Result += line;
            }
            inputReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                inputReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return Result;
    }

    /**
     * 返回不为空的字符串，默认 为“0”
     *
     * @param str 字符串
     * @return 非空的字符串
     */
    public static String parseNullToZero(String str) {
        if (TextUtils.isEmpty(str)) {
            return "0";
        }
        return str;
    }

    // 防止为空。
    public static String parseOrderToZero(String str) {
        if (TextUtils.isEmpty(str)) {
            return "0.00";
        }
        return str;
    }

    /**
     * 字符串是否为空
     *
     * @param str
     * @return
     */
    public static boolean isNull(String str) {
        if (str == null || str.equals("null") || str.trim().equals("")) {
            return true;
        }
        return false;
    }


    public static String doubleStringToString(String dou) {
        return doubleToString(stringToDouble(dou));
    }

    public static Double stringToDouble(String string) {
        try {
            return Double.parseDouble(string);
        } catch (Exception e) {
            return 0.0;
        }
    }

    /**
     * 对象转整数
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static int toInt(Object obj) {
        if (obj == null)
            return 0;
        return toInt(obj.toString(), 0);
    }

    /**
     * 字符串转整数
     *
     * @param str
     * @param defValue
     */
    public static int toInt(String str, int defValue) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
        }
        return defValue;
    }

    /**
     * 手机号码过滤-
     *
     * @param str
     */
    public static String getPhoneStr(String str) {
        if (TextUtils.isEmpty(str)) return "";
        return str.replace("-", "");
    }

    public static String toString(int value) {
        try {
            return String.valueOf(value);
        } catch (Exception e) {
            return "";
        }
    }

    //获取一个普通的带金额 符号的
    public static String withMoney(String money) {
        if (money == null) {
            return "¥";
        }
        return "¥" + money;
    }

    //拼接url参数
    public static String getUrl(String baseUrl, HashMap<String, String> params) {
        // 添加url参数
        if (params != null) {
            Iterator<String> it = params.keySet().iterator();
            StringBuffer sb = null;
            while (it.hasNext()) {
                String key = it.next();
                String value = params.get(key);
                if (sb == null) {
                    sb = new StringBuffer();
                    sb.append("?");
                } else {
                    sb.append("&");
                }
                sb.append(key);
                sb.append("=");
                sb.append(value);
            }
            if(sb != null){
                baseUrl += sb.toString();
            }
        }
        return baseUrl;
    }

    public static String removeAllSpace(String str) {
        if (str == null) {
            return "";
        }
        return str.replace(" ", "");
    }

    /**
     * 获取发票类型文案
     *
     * @param invoiceType 发票类型 1：增值税普通发票 2：增值税专用发票
     * @return 文案
     */
    public static String getInvoiceTypeStr(String invoiceType) {
        if (TextUtils.isEmpty(invoiceType)) return "";
        if (invoiceType.equalsIgnoreCase("1")) return "增值税普通发票";
        if (invoiceType.equalsIgnoreCase("2")) return "增值税专用发票";
        return "";
    }

    /**
     * 对Double做处理，有小数显示两位小数，否则保留整数
     *
     * @param number 待处理的数值
     * @return 默认返回空字符串
     */
    public static String getDoubleToNatureString(Double number) {
        if (number == null) {
            return "";
        }
        if ((int) number.doubleValue() == number) {
            return String.valueOf((int) number.doubleValue());
        }
        DecimalFormat df = new DecimalFormat("######0.00");
        return df.format(number);
    }

    //设置红点数量
    public static String getRedNum(int number) {
        if (number > 99) {
            return "99+";
        }
        if (number <= 0) {
            return "0";
        }
        return StringUtils.toString(number);
    }
}
